
;  FileName : ExitBootLoader.asm
;  Description:

;  Created on 2009.3.3 by ZZP.

;  Revision History:
    

  .def _ExitBootLoader
  .ref _DumyProc

  .text

_ExitBootLoader:
; Initialize the stack pointer.
__stack: .usect ".stack",0
  MOV SP, #__stack ; Initialize the stack pointer

;...............................................
; Clear the bottom of the stack. This will endup
; in RPC when we are finished
;...............................................
  MOV *SP++,#0
  MOV *SP++,#0
;...............................................
; Load RPC with the entry point as determined
; by the boot mode. This address will be returned
; in the ACC register.
;...............................................
  LCR _DumyProc

  PUSH ACC
  POP RPC
;...............................................
; Put registers back in their reset state.
;
; Clear all the XARn, ACC, XT, and P and DP
; registers
;
; NOTE: Leave the device in C28x operating mode
; (OBJMODE = 1, AMODE = 0)
;...............................................
  ZAPA
  MOVL XT,ACC
  MOVZ AR0,AL
  MOVZ AR1,AL
  MOVZ AR2,AL
  MOVZ AR3,AL
  MOVZ AR4,AL
  MOVZ AR5,AL
  MOVZ AR6,AL
  MOVZ AR7,AL
  MOVW DP, #0
;................................................
; Restore ST0 and ST1. Note OBJMODE is
; the only bit not restored to its reset state.
; OBJMODE is left set for C28x object operating
; mode.
;
; ST0 = 0x0000 ST1 = 0x0A0B
; 15:10 OVC = 0 15:13 ARP = 0
; 9: 7 PM = 0 12 XF = 0
; 6 V = 0 11 M0M1MAP = 1
; 5 N = 0 10 reserved
; 4 Z = 0 9 OBJMODE = 1
; 3 C = 0 8 AMODE = 0
; 2 TC = 0 7 IDLESTAT = 0
; 1 OVM = 0 6 EALLOW = 0
; 0 SXM = 0 5 LOOP = 0
; 4 SPA = 0
; 3 VMAP = 1
; 2 PAGE0 = 0
; 1 DBGM = 1
; 0 INTM = 1
;...............................................
  MOV *SP++,#0
  MOV *SP++,#0x0A0B
  POP ST1
  POP ST0
;................................................
; Jump to the EntryAddr as defined by the
; boot mode selected and continue execution
;...............................................
  LRETR
;eof .......... 